<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/1/28
 * Time: 11:22
 */
//接口类
include 'helpers.php';
interface Model{
    public function handle();
}
//公共类
trait Common{
    public function select(){
        echo '查询一个公共类的查询';
    }
}

//基类
class Base implements Model{

    protected function select(){
        echo "查询一个基类的查询";
    }

    public function add(){
        echo 'dd';
    }

    public function handle(){

        echo '操作类';
    }
}
class User extends Base{
    use Common;
    protected function ad(){
        echo '调用了一个受保护方法';
    }

    //如果本类中的方法重写了父类方法，权限级别不能比父类方法的高
    public function select(){
        echo '查询子类的数据';
    }

    public function up($a,$b,$c){
        echo '更新了:'.($a+$b+$c);
    }

    public static function del(){
        echo "删除了一个数据";
        //静态方法中调用非静态方法
        (new static) ->ad();
    }
    public function __call($name, $arguments)
    {
         $this->name(...$arguments);
    }

    public static function __callStatic($name, $arguments)
    {
        p($arguments);
       //$arguments是个数组，...会循环给方法的参数赋值
       echo  (new static)->up(...$arguments);
    }
}

$user=new User;

echo User::up1(2,3,5).'<br />';

echo User::del().'<br />';

//公共类与基类中有相同的方法，会优先调用公共类trait中的方法,
//如果本类中有该方法会优先调用本类的方法
echo $user->select().'<br />';

//判断是否一个类
$a=new stdClass();
p($a instanceof stdClass);


